package otc.regate.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;

/**
 * Le client cree le thread qui permet d'envoyer les informations de.
 * geolocalisation au serveur.
 *
 * @author Escop, Jacquet, Loiret, Marboeuf, Millet, Montferrand
 *
 */
public class Client {

    /** Point de connexion avec le serveur. */
    private Socket socketClient;
    /** Permet d'envoyer des informations sur la socket. */
    private ObjectOutputStream outputStream;

    /**
     * Constructeur.
     */
    public Client() {

        try {

            // Recupere les informations entrees par l'utilisateur

            String ipServeur = "localhost";
            int port = 9635;

            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);

            System.out.println("Entrez l'identifiant du participant : ");
            int idParticipant = Integer.parseInt(br.readLine());
            System.out.println("Entrez le nom de la course : ");
            String nomCourse = br.readLine();


            InetAddress serveur = InetAddress.getByName(ipServeur);
            socketClient = new Socket(serveur, port);
            ThreadClient threadClient =
                new ThreadClient(this, idParticipant, nomCourse);


            threadClient.start();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Methode de deconnexion du serveur.
     *
     * @param s Socket
     * @throws IOException IoException
     */
    public final void deconnectionRegate(final Socket s) throws IOException {

        s.close();
        System.out.println("Deconnexion Serveur");
    }

    /**
     * Methode d'envoie d'un flux XML vers le serveur.
     *
     * @param fluxXML flux XML
     */
    public final void envoieXML(final String fluxXML) {
        try {
            outputStream = new ObjectOutputStream(socketClient
                    .getOutputStream());
            outputStream.writeObject(fluxXML);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @return the socketClient
     */
    public final Socket getSocketClient() {
        return socketClient;
    }

    /**
     * @param sc the socketClient to set
     */
    public final void setSocketClient(final Socket sc) {
        this.socketClient = sc;
    }

}
